inspector: More refactoring
authorMatthias Clasen <mclasen@redhat.com>
Sat, 11 Oct 2014 01:40:53 +0000 (21:40 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 11 Oct 2014 04:59:36 +0000 (00:59 -0400)
Rename widget tree to object tree. It contains plenty of
non-widgets nowadays, after all.

20 files changed:
gtk/inspector/Makefile.am
gtk/inspector/gestures.c
gtk/inspector/init.c
gtk/inspector/inspect-button.c
gtk/inspector/inspector.gresource.xml
gtk/inspector/misc-info.c
gtk/inspector/object-tree.c [new file with mode: 0644]
gtk/inspector/object-tree.h [new file with mode: 0644]
gtk/inspector/object-tree.ui [new file with mode: 0644]
gtk/inspector/object-tree.ui.h [new file with mode: 0644]
gtk/inspector/object-tree.ui.u [new file with mode: 0644]
gtk/inspector/prop-editor.c
gtk/inspector/prop-list.c
gtk/inspector/widget-tree.c [deleted file]
gtk/inspector/widget-tree.h [deleted file]
gtk/inspector/widget-tree.ui [deleted file]
gtk/inspector/widget-tree.ui.h [deleted file]
gtk/inspector/window.c
gtk/inspector/window.h
gtk/inspector/window.ui

index 9ba97022f88492073d09c67252a477aec3e3b24d..bc16e6a708ee21c368ccd75cd705cef7a6cd3b33 100644 (file)
@@ -38,6 +38,8 @@ libgtkinspector_la_SOURCES =          \
        misc-info.c                     \
        object-hierarchy.h              \
        object-hierarchy.c              \
+       object-tree.h                   \
+       object-tree.c                   \
        prop-editor.h                   \
        prop-editor.c                   \
        prop-list.h                     \
@@ -54,8 +56,6 @@ libgtkinspector_la_SOURCES =          \
        size-groups.c                   \
        visual.h                        \
        visual.c                        \
-       widget-tree.h                   \
-       widget-tree.c                   \
        window.h                        \
        window.c
 
@@ -96,12 +96,12 @@ templates =                                 \
        menu.ui                         \
        misc-info.ui                    \
        object-hierarchy.ui             \
+       object-tree.ui                  \
        prop-list.ui                    \
        resource-list.ui                \
        signals-list.ui                 \
        style-prop-list.ui              \
        visual.ui                       \
-       widget-tree.ui                  \
        window.ui
 
 template_headers = $(templates:.ui=.ui.h)
index d9d727a7f10af78e02f2cb1501c1a403378e5c0d..039e21a36b9ee682cae2567a459175f0054fc5c6 100644 (file)
@@ -19,7 +19,7 @@
 #include <glib/gi18n-lib.h>
 
 #include "gestures.h"
-#include "widget-tree.h"
+#include "object-tree.h"
 
 #include "gtksizegroup.h"
 #include "gtkcomboboxtext.h"
 enum
 {
   PROP_0,
-  PROP_WIDGET_TREE
+  PROP_OBJECT_TREE
 };
 
 struct _GtkInspectorGesturesPrivate
 {
   GtkSizeGroup *sizegroup;
   GObject *object;
-  GtkWidget *widget_tree;
+  GtkWidget *object_tree;
 };
 
 G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorGestures, gtk_inspector_gestures, GTK_TYPE_BOX)
@@ -92,7 +92,7 @@ row_activated (GtkListBox           *box,
   GObject *gesture;
   
   gesture = G_OBJECT (g_object_get_data (G_OBJECT (row), "gesture"));
-  gtk_inspector_widget_tree_select_object (GTK_INSPECTOR_WIDGET_TREE (sl->priv->widget_tree),
+  gtk_inspector_object_tree_select_object (GTK_INSPECTOR_OBJECT_TREE (sl->priv->object_tree),
                                            gesture);
 }
 
@@ -223,8 +223,8 @@ get_property (GObject    *object,
 
   switch (param_id)
     {
-      case PROP_WIDGET_TREE:
-        g_value_take_object (value, sl->priv->widget_tree);
+      case PROP_OBJECT_TREE:
+        g_value_take_object (value, sl->priv->object_tree);
         break;
 
       default:
@@ -243,8 +243,8 @@ set_property (GObject      *object,
 
   switch (param_id)
     {
-      case PROP_WIDGET_TREE:
-        sl->priv->widget_tree = g_value_get_object (value);
+      case PROP_OBJECT_TREE:
+        sl->priv->object_tree = g_value_get_object (value);
         break;
 
       default:
@@ -261,8 +261,8 @@ gtk_inspector_gestures_class_init (GtkInspectorGesturesClass *klass)
   object_class->get_property = get_property;
   object_class->set_property = set_property;
 
-  g_object_class_install_property (object_class, PROP_WIDGET_TREE,
-      g_param_spec_object ("widget-tree", "Widget Tree", "Widget tree",
+  g_object_class_install_property (object_class, PROP_OBJECT_TREE,
+      g_param_spec_object ("object-tree", "Widget Tree", "Widget tree",
                            GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 }
 
index 4a6a5c5f647d18e5b5106bb9cae4a44261220435..6ba9ca2402b3f78bfb2db62e8c06bad282713090 100644 (file)
@@ -33,6 +33,7 @@
 #include "menu.h"
 #include "misc-info.h"
 #include "object-hierarchy.h"
+#include "object-tree.h"
 #include "prop-list.h"
 #include "resource-list.h"
 #include "resources.h"
@@ -40,7 +41,6 @@
 #include "size-groups.h"
 #include "style-prop-list.h"
 #include "visual.h"
-#include "widget-tree.h"
 #include "window.h"
 
 void
@@ -57,13 +57,13 @@ gtk_inspector_init (void)
   g_type_ensure (GTK_TYPE_INSPECTOR_MENU);
   g_type_ensure (GTK_TYPE_INSPECTOR_MISC_INFO);
   g_type_ensure (GTK_TYPE_INSPECTOR_OBJECT_HIERARCHY);
+  g_type_ensure (GTK_TYPE_INSPECTOR_OBJECT_TREE);
   g_type_ensure (GTK_TYPE_INSPECTOR_PROP_LIST);
   g_type_ensure (GTK_TYPE_INSPECTOR_RESOURCE_LIST);
   g_type_ensure (GTK_TYPE_INSPECTOR_SIGNALS_LIST);
   g_type_ensure (GTK_TYPE_INSPECTOR_STYLE_PROP_LIST);
   g_type_ensure (GTK_TYPE_INSPECTOR_SIZE_GROUPS);
   g_type_ensure (GTK_TYPE_INSPECTOR_VISUAL);
-  g_type_ensure (GTK_TYPE_INSPECTOR_WIDGET_TREE);
   g_type_ensure (GTK_TYPE_INSPECTOR_WINDOW);
 }
 
index dca645e1fb2e3bbe7f73f4f4c38dd583c81f928f..86c6240f1c3725b8a83104db6c56d714ed761aaa 100644 (file)
@@ -25,7 +25,7 @@
 #include <glib/gi18n-lib.h>
 
 #include "window.h"
-#include "widget-tree.h"
+#include "object-tree.h"
 
 #include "gtkstack.h"
 #include "gtkmain.h"
@@ -208,16 +208,16 @@ static void
 select_widget (GtkInspectorWindow *iw,
                GtkWidget          *widget)
 {
-  GtkInspectorWidgetTree *wt = GTK_INSPECTOR_WIDGET_TREE (iw->widget_tree);
+  GtkInspectorObjectTree *wt = GTK_INSPECTOR_OBJECT_TREE (iw->object_tree);
   GtkTreeIter iter;
 
   iw->selected_widget = widget;
 
   gtk_stack_set_visible_child_name (GTK_STACK (iw->top_stack), "objects");
 
-  if (!gtk_inspector_widget_tree_find_object (wt, G_OBJECT (widget), &iter))
-    gtk_inspector_widget_tree_scan (wt, gtk_widget_get_toplevel (widget));
- gtk_inspector_widget_tree_select_object (wt, G_OBJECT (widget));
+  if (!gtk_inspector_object_tree_find_object (wt, G_OBJECT (widget), &iter))
+    gtk_inspector_object_tree_scan (wt, gtk_widget_get_toplevel (widget));
+ gtk_inspector_object_tree_select_object (wt, G_OBJECT (widget));
 }
 
 static void
index 76385e65125391e6907d17237c342d3178e56c5a..592b9706b671fc4eeee783181f5d6d14fc918cb4 100644 (file)
@@ -9,12 +9,12 @@
     <file compressed="true">menu.ui</file>
     <file compressed="true">misc-info.ui</file>
     <file compressed="true">object-hierarchy.ui</file>
+    <file compressed="true">object-tree.ui</file>
     <file compressed="true">prop-list.ui</file>
     <file compressed="true">style-prop-list.ui</file>
     <file compressed="true">resource-list.ui</file>
     <file compressed="true">signals-list.ui</file>
     <file compressed="true">visual.ui</file>
-    <file compressed="true">widget-tree.ui</file>
     <file compressed="true">window.ui</file>
     <file>logo.png</file>
   </gresource>
index 4b615e52cc45ed6a0b5e20eba8bc5dec7097bf23..efb0e6cebc45d6ed6bad170fc6848d0c823f21e6 100644 (file)
@@ -20,7 +20,7 @@
 
 #include "misc-info.h"
 #include "window.h"
-#include "widget-tree.h"
+#include "object-tree.h"
 
 #include "gtktypebuiltins.h"
 #include "gtktreeview.h"
@@ -29,7 +29,7 @@
 #include "gtkframe.h"
 
 struct _GtkInspectorMiscInfoPrivate {
-  GtkInspectorWidgetTree *widget_tree;
+  GtkInspectorObjectTree *object_tree;
 
   GObject *object;
 
@@ -50,7 +50,7 @@ struct _GtkInspectorMiscInfoPrivate {
 enum
 {
   PROP_0,
-  PROP_WIDGET_TREE
+  PROP_OBJECT_TREE
 };
 
 G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorMiscInfo, gtk_inspector_misc_info, GTK_TYPE_SCROLLED_WINDOW)
@@ -127,17 +127,17 @@ show_object (GtkInspectorMiscInfo *sl,
 {
   GtkTreeIter iter;
 
-  g_object_set_data (G_OBJECT (sl->priv->widget_tree), "next-tab", (gpointer)tab);
-  if (gtk_inspector_widget_tree_find_object (sl->priv->widget_tree, object, &iter))
+  g_object_set_data (G_OBJECT (sl->priv->object_tree), "next-tab", (gpointer)tab);
+  if (gtk_inspector_object_tree_find_object (sl->priv->object_tree, object, &iter))
     {
-      gtk_inspector_widget_tree_select_object (sl->priv->widget_tree, object);
+      gtk_inspector_object_tree_select_object (sl->priv->object_tree, object);
     }
   else if (GTK_IS_WIDGET (object) &&
-           gtk_inspector_widget_tree_find_object (sl->priv->widget_tree, G_OBJECT (gtk_widget_get_parent (GTK_WIDGET (object))), &iter))
+           gtk_inspector_object_tree_find_object (sl->priv->object_tree, G_OBJECT (gtk_widget_get_parent (GTK_WIDGET (object))), &iter))
 
     {
-      gtk_inspector_widget_tree_append_object (sl->priv->widget_tree, object, &iter, name);
-      gtk_inspector_widget_tree_select_object (sl->priv->widget_tree, object);
+      gtk_inspector_object_tree_append_object (sl->priv->object_tree, object, &iter, name);
+      gtk_inspector_object_tree_select_object (sl->priv->object_tree, object);
     }
   else
     {
@@ -301,8 +301,8 @@ get_property (GObject    *object,
 
   switch (param_id)
     {
-      case PROP_WIDGET_TREE:
-        g_value_take_object (value, sl->priv->widget_tree);
+      case PROP_OBJECT_TREE:
+        g_value_take_object (value, sl->priv->object_tree);
         break;
 
       default:
@@ -321,8 +321,8 @@ set_property (GObject      *object,
 
   switch (param_id)
     {
-      case PROP_WIDGET_TREE:
-        sl->priv->widget_tree = g_value_get_object (value);
+      case PROP_OBJECT_TREE:
+        sl->priv->object_tree = g_value_get_object (value);
         break;
 
       default:
@@ -340,8 +340,8 @@ gtk_inspector_misc_info_class_init (GtkInspectorMiscInfoClass *klass)
   object_class->get_property = get_property;
   object_class->set_property = set_property;
 
-  g_object_class_install_property (object_class, PROP_WIDGET_TREE,
-      g_param_spec_object ("widget-tree", "Widget Tree", "Widget tree",
+  g_object_class_install_property (object_class, PROP_OBJECT_TREE,
+      g_param_spec_object ("object-tree", "Object Tree", "Obect tree",
                            GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/inspector/misc-info.ui");
diff --git a/gtk/inspector/object-tree.c b/gtk/inspector/object-tree.c
new file mode 100644 (file)
index 0000000..7b4def0
--- /dev/null
@@ -0,0 +1,561 @@
+/*
+ * Copyright (c) 2008-2009  Christian Hammond
+ * Copyright (c) 2008-2009  David Trowbridge
+ * Copyright (c) 2013 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+#include <string.h>
+
+#include "object-tree.h"
+#include "prop-list.h"
+
+#include "gtkbuildable.h"
+#include "gtkbutton.h"
+#include "gtkcelllayout.h"
+#include "gtkcomboboxprivate.h"
+#include "gtkiconview.h"
+#include "gtklabel.h"
+#include "gtkmenuitem.h"
+#include "gtksettings.h"
+#include "gtktextview.h"
+#include "gtktreeview.h"
+#include "gtktreeselection.h"
+#include "gtktreestore.h"
+#include "gtktreemodelsort.h"
+#include "gtktreemodelfilter.h"
+#include "gtkwidgetprivate.h"
+
+enum
+{
+  OBJECT,
+  OBJECT_TYPE,
+  OBJECT_NAME,
+  OBJECT_LABEL,
+  OBJECT_ADDRESS,
+  SENSITIVE
+};
+
+
+enum
+{
+  OBJECT_CHANGED,
+  LAST_SIGNAL
+};
+
+
+struct _GtkInspectorObjectTreePrivate
+{
+  GtkTreeView *tree;
+  GtkTreeStore *model;
+  GHashTable *iters;
+  gulong map_hook;
+  gulong unmap_hook;
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorObjectTree, gtk_inspector_object_tree, GTK_TYPE_BOX)
+
+static void
+on_widget_selected (GtkTreeSelection       *selection,
+                    GtkInspectorObjectTree *wt)
+{
+  GObject *object;
+  GtkTreeIter iter;
+  GtkTreeSelection *sel;
+  GtkTreeModel *model;
+
+  sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (wt->priv->tree));
+  if (gtk_tree_selection_get_selected (sel, &model, &iter))
+    gtk_tree_model_get (model, &iter,
+                        OBJECT, &object,
+                        -1);
+  else
+    object = NULL;
+
+  g_signal_emit (wt, signals[OBJECT_CHANGED], 0, object);
+}
+
+typedef struct
+{
+  GtkInspectorObjectTree *wt;
+  GObject *object;
+  GtkTreeRowReference *row;
+} ObjectData;
+
+static void
+gtk_object_tree_remove_dead_object (gpointer data, GObject *dead_object)
+{
+  ObjectData *od = data;
+
+  if (gtk_tree_row_reference_valid (od->row))
+    {
+      GtkTreePath *path;
+      GtkTreeIter iter;
+      path = gtk_tree_row_reference_get_path (od->row);
+      gtk_tree_model_get_iter (GTK_TREE_MODEL (od->wt->priv->model), &iter, path);
+      gtk_tree_store_remove (od->wt->priv->model, &iter);
+      gtk_tree_path_free (path);
+    }
+  od->object = NULL;
+  g_hash_table_remove (od->wt->priv->iters, dead_object);
+}
+
+static void
+object_data_free (gpointer data)
+{
+  ObjectData *od = data;
+
+  gtk_tree_row_reference_free (od->row);
+
+  if (od->object)
+    g_object_weak_unref (od->object, gtk_object_tree_remove_dead_object, od);
+
+  g_free (od);
+}
+
+static gboolean
+map_or_unmap (GSignalInvocationHint *ihint,
+              guint                  n_params,
+              const GValue          *params,
+              gpointer               data)
+{
+  GtkInspectorObjectTree *wt = data;
+  GtkWidget *widget;
+  GtkTreeIter iter;
+
+  widget = g_value_get_object (params);
+  if (gtk_inspector_object_tree_find_object (wt, G_OBJECT (widget), &iter))
+    gtk_tree_store_set (wt->priv->model, &iter,
+                        SENSITIVE, gtk_widget_get_mapped (widget),
+                        -1);
+
+  return TRUE;
+}
+
+static void
+gtk_inspector_object_tree_init (GtkInspectorObjectTree *wt)
+{
+  guint signal_id;
+
+  wt->priv = gtk_inspector_object_tree_get_instance_private (wt);
+  wt->priv->iters = g_hash_table_new_full (g_direct_hash,
+                                           g_direct_equal,
+                                           NULL,
+                                           (GDestroyNotify) object_data_free);
+  gtk_widget_init_template (GTK_WIDGET (wt));
+
+  signal_id = g_signal_lookup ("map", GTK_TYPE_WIDGET);
+  wt->priv->map_hook = g_signal_add_emission_hook (signal_id, 0,
+                                                   map_or_unmap, wt, NULL);
+  signal_id = g_signal_lookup ("unmap", GTK_TYPE_WIDGET);
+  wt->priv->unmap_hook = g_signal_add_emission_hook (signal_id, 0,
+                                                   map_or_unmap, wt, NULL);
+
+  gtk_inspector_object_tree_append_object (wt, G_OBJECT (gtk_settings_get_default ()), NULL, NULL);
+}
+
+static void
+gtk_inspector_object_tree_finalize (GObject *object)
+{
+  GtkInspectorObjectTree *wt = GTK_INSPECTOR_OBJECT_TREE (object);
+  guint signal_id;
+
+  g_hash_table_unref (wt->priv->iters);
+
+  signal_id = g_signal_lookup ("map", GTK_TYPE_WIDGET);
+  g_signal_remove_emission_hook (signal_id, wt->priv->map_hook);
+  signal_id = g_signal_lookup ("unmap", GTK_TYPE_WIDGET);
+  g_signal_remove_emission_hook (signal_id, wt->priv->unmap_hook);
+
+  G_OBJECT_CLASS (gtk_inspector_object_tree_parent_class)->finalize (object);
+}
+
+static void
+gtk_inspector_object_tree_class_init (GtkInspectorObjectTreeClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+  object_class->finalize = gtk_inspector_object_tree_finalize;
+
+  signals[OBJECT_CHANGED] =
+      g_signal_new ("object-changed",
+                    G_OBJECT_CLASS_TYPE (klass),
+                    G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
+                    G_STRUCT_OFFSET (GtkInspectorObjectTreeClass, object_changed),
+                    NULL, NULL,
+                    g_cclosure_marshal_VOID__OBJECT,
+                    G_TYPE_NONE, 1, G_TYPE_OBJECT);
+
+  gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/inspector/object-tree.ui");
+  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorObjectTree, model);
+  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorObjectTree, tree);
+  gtk_widget_class_bind_template_callback (widget_class, on_widget_selected);
+}
+
+typedef struct
+{
+  GtkInspectorObjectTree *wt;
+  GtkTreeIter *iter;
+  GObject *parent;
+} FindAllData;
+
+static void
+child_callback (GtkWidget *widget,
+                gpointer   data)
+{
+  FindAllData *d = data;
+
+  gtk_inspector_object_tree_append_object (d->wt, G_OBJECT (widget), d->iter, NULL);
+}
+
+static gboolean
+cell_callback (GtkCellRenderer *renderer,
+               gpointer         data)
+{
+  FindAllData *d = data;
+  gpointer cell_layout;
+
+  cell_layout = g_object_get_data (d->parent, "gtk-inspector-cell-layout");
+  g_object_set_data (G_OBJECT (renderer), "gtk-inspector-cell-layout", cell_layout);
+  gtk_inspector_object_tree_append_object (d->wt, G_OBJECT (renderer), d->iter, NULL);
+
+  return FALSE;
+}
+
+static void
+tag_callback (GtkTextTag *tag,
+              gpointer    data)
+{
+  FindAllData *d = data;
+  gchar *name;
+
+  g_object_get (tag, "name", &name, NULL);
+  gtk_inspector_object_tree_append_object (d->wt, G_OBJECT (tag), d->iter, name);
+  g_free (name);
+}
+
+void
+gtk_inspector_object_tree_append_object (GtkInspectorObjectTree *wt,
+                                         GObject                *object,
+                                         GtkTreeIter            *parent_iter,
+                                         const gchar            *name)
+{
+  GtkTreeIter iter;
+  GtkTreePath *path;
+  const gchar *class_name;
+  gchar *address;
+  gboolean mapped;
+  ObjectData *od;
+  const gchar *label;
+
+  if (GTK_IS_WIDGET (object))
+    mapped = gtk_widget_get_mapped (GTK_WIDGET (object));
+  else
+    mapped = TRUE;
+
+  class_name = G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (object));
+
+  if (GTK_IS_WIDGET (object))
+    {
+      const gchar *id;
+      id = gtk_widget_get_name (GTK_WIDGET (object));
+       if (name == NULL && id != NULL && g_strcmp0 (id, class_name) != 0)
+         name = id;
+    }
+
+  if (GTK_IS_BUILDABLE (object))
+    {
+      const gchar *id;
+      id = gtk_buildable_get_name (GTK_BUILDABLE (object));
+      if (name == NULL && id != NULL && !g_str_has_prefix (id, "___object_"))
+        name = id;
+    }
+
+  if (name == NULL)
+    name = "";
+
+  if (GTK_IS_LABEL (object))
+    label = gtk_label_get_text (GTK_LABEL (object));
+  else if (GTK_IS_BUTTON (object))
+    label = gtk_button_get_label (GTK_BUTTON (object));
+  else if (GTK_IS_WINDOW (object))
+    label = gtk_window_get_title (GTK_WINDOW (object));
+  else if (GTK_IS_TREE_VIEW_COLUMN (object))
+    label = gtk_tree_view_column_get_title (GTK_TREE_VIEW_COLUMN (object));
+  else
+    label = "";
+
+  address = g_strdup_printf ("%p", object);
+
+  gtk_tree_store_append (wt->priv->model, &iter, parent_iter);
+  gtk_tree_store_set (wt->priv->model, &iter,
+                      OBJECT, object,
+                      OBJECT_TYPE, class_name,
+                      OBJECT_NAME, name,
+                      OBJECT_LABEL, label,
+                      OBJECT_ADDRESS, address,
+                      SENSITIVE, mapped,
+                      -1);
+
+  od = g_new0 (ObjectData, 1);
+  od->wt = wt;
+  od->object = object;
+  path = gtk_tree_model_get_path (GTK_TREE_MODEL (wt->priv->model), &iter);
+  od->row = gtk_tree_row_reference_new (GTK_TREE_MODEL (wt->priv->model), path);
+  gtk_tree_path_free (path);
+
+  g_hash_table_insert (wt->priv->iters, object, od);
+  g_object_weak_ref (object, gtk_object_tree_remove_dead_object, od);
+
+  g_free (address);
+
+  if (GTK_IS_CONTAINER (object))
+    {
+      FindAllData data;
+
+      data.wt = wt;
+      data.iter = &iter;
+      data.parent = object;
+
+      gtk_container_forall (GTK_CONTAINER (object), child_callback, &data);
+    }
+
+  /* Below are special cases for dependent objects which are not
+   * children in the GtkContainer sense, but which we still want
+   * to show in the tree right away.
+   */
+  if (GTK_IS_TREE_MODEL_SORT (object))
+    {
+      GObject *child = G_OBJECT (gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (object)));
+      if (child)
+        gtk_inspector_object_tree_append_object (wt, child, &iter, "model");
+    }
+
+  if (GTK_IS_TREE_MODEL_FILTER (object))
+    {
+      GObject *child = G_OBJECT (gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (object)));
+      if (child)
+        gtk_inspector_object_tree_append_object (wt, child, &iter, "model");
+    }
+
+  if (GTK_IS_MENU_ITEM (object))
+    {
+      GtkWidget *submenu;
+
+      submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (object));
+      if (submenu)
+        gtk_inspector_object_tree_append_object (wt, G_OBJECT (submenu), &iter, "submenu");
+    }
+
+  if (GTK_IS_COMBO_BOX (object))
+    {
+      GtkWidget *popup;
+      GObject *child;
+
+      popup = gtk_combo_box_get_popup (GTK_COMBO_BOX (object));
+      if (popup)
+        gtk_inspector_object_tree_append_object (wt, G_OBJECT (popup), &iter, "popup");
+
+      child = G_OBJECT (gtk_combo_box_get_model (GTK_COMBO_BOX (object)));
+      if (child)
+        gtk_inspector_object_tree_append_object (wt, child, &iter, "model");
+    }
+
+  if (GTK_IS_TREE_VIEW (object))
+    {
+      gint n_columns, i;
+      GObject *child;
+
+      child = G_OBJECT (gtk_tree_view_get_model (GTK_TREE_VIEW (object)));
+      if (child)
+        gtk_inspector_object_tree_append_object (wt, child, &iter, "model");
+
+      child = G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (object)));
+      if (child)
+        gtk_inspector_object_tree_append_object (wt, child, &iter, "selection");
+
+      n_columns = gtk_tree_view_get_n_columns (GTK_TREE_VIEW (object));
+      for (i = 0; i < n_columns; i++)
+        {
+          child = G_OBJECT (gtk_tree_view_get_column (GTK_TREE_VIEW (object), i));
+          gtk_inspector_object_tree_append_object (wt, child, &iter, NULL);
+        }
+    }
+
+  if (GTK_IS_ICON_VIEW (object))
+    {
+      GObject *child;
+
+      child = G_OBJECT (gtk_icon_view_get_model (GTK_ICON_VIEW (object)));
+      if (child)
+        gtk_inspector_object_tree_append_object (wt, child, &iter, "model");
+    }
+
+  if (GTK_IS_CELL_AREA (object))
+    {
+      FindAllData data;
+
+      data.wt = wt;
+      data.iter = &iter;
+      data.parent = object;
+
+      gtk_cell_area_foreach (GTK_CELL_AREA (object), cell_callback, &data);
+    }
+  else if (GTK_IS_CELL_LAYOUT (object))
+    {
+      GtkCellArea *area;
+
+      area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (object));
+      g_object_set_data (G_OBJECT (area), "gtk-inspector-cell-layout", object);
+      gtk_inspector_object_tree_append_object (wt, G_OBJECT (area), &iter, "cell-area");
+    }
+
+  if (GTK_IS_TEXT_VIEW (object))
+    {
+      GtkTextBuffer *buffer;
+
+      buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (object));
+      gtk_inspector_object_tree_append_object (wt, G_OBJECT (buffer), &iter, "buffer");
+    }
+
+  if (GTK_IS_TEXT_BUFFER (object))
+    {
+      GtkTextTagTable *tags;
+
+      tags = gtk_text_buffer_get_tag_table (GTK_TEXT_BUFFER (object));
+      gtk_inspector_object_tree_append_object (wt, G_OBJECT (tags), &iter, "tag-table");
+    }
+
+  if (GTK_IS_TEXT_TAG_TABLE (object))
+    {
+      FindAllData data;
+
+      data.wt = wt;
+      data.iter = &iter;
+      data.parent = object;
+
+      gtk_text_tag_table_foreach (GTK_TEXT_TAG_TABLE (object), tag_callback, &data);
+    }
+
+  if (GTK_IS_WIDGET (object))
+    {
+      struct {
+        GtkPropagationPhase  phase;
+        const gchar         *name;
+      } phases[] = {
+        { GTK_PHASE_CAPTURE, "capture" },
+        { GTK_PHASE_TARGET,  "target" },
+        { GTK_PHASE_BUBBLE,  "bubble" },
+        { GTK_PHASE_NONE,    "" }
+      };
+      gint i;
+
+      for (i = 0; i < G_N_ELEMENTS (phases); i++)
+        {
+          GList *list, *l;
+
+          list = _gtk_widget_list_controllers (GTK_WIDGET (object), phases[i].phase);
+          for (l = list; l; l = l->next)
+            {
+              GObject *controller = l->data;
+              gtk_inspector_object_tree_append_object (wt, controller, &iter, phases[i].name);
+            }
+          g_list_free (list);
+        }
+    }
+
+}
+
+void
+gtk_inspector_object_tree_scan (GtkInspectorObjectTree *wt,
+                                GtkWidget              *window)
+{
+  GtkWidget *inspector_win;
+  GList *toplevels, *l;
+
+  gtk_tree_store_clear (wt->priv->model);
+  g_hash_table_remove_all (wt->priv->iters);
+  gtk_inspector_object_tree_append_object (wt, G_OBJECT (gtk_settings_get_default ()), NULL, NULL);
+  if (g_application_get_default ())
+    gtk_inspector_object_tree_append_object (wt, G_OBJECT (g_application_get_default ()), NULL, NULL);
+
+  if (window)
+    gtk_inspector_object_tree_append_object (wt, G_OBJECT (window), NULL, NULL);
+
+  inspector_win = gtk_widget_get_toplevel (GTK_WIDGET (wt));
+  toplevels = gtk_window_list_toplevels ();
+  for (l = toplevels; l; l = l->next)
+    {
+      if (GTK_IS_WINDOW (l->data) &&
+          gtk_window_get_window_type (l->data) == GTK_WINDOW_TOPLEVEL &&
+          l->data != window &&
+          l->data != inspector_win)
+        gtk_inspector_object_tree_append_object (wt, G_OBJECT (l->data), NULL, NULL);
+    }
+  g_list_free (toplevels);
+
+  gtk_tree_view_columns_autosize (GTK_TREE_VIEW (wt->priv->tree));
+}
+
+gboolean
+gtk_inspector_object_tree_find_object (GtkInspectorObjectTree *wt,
+                                       GObject                *object,
+                                       GtkTreeIter            *iter)
+{
+  ObjectData *od;
+
+  od = g_hash_table_lookup (wt->priv->iters, object);
+  if (od && gtk_tree_row_reference_valid (od->row))
+    {
+      GtkTreePath *path;
+
+      path = gtk_tree_row_reference_get_path (od->row);
+      gtk_tree_model_get_iter (GTK_TREE_MODEL (wt->priv->model), iter, path);
+      gtk_tree_path_free (path);
+
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+void
+gtk_inspector_object_tree_select_object (GtkInspectorObjectTree *wt,
+                                         GObject                *object)
+{
+  GtkTreeIter iter;
+
+  if (gtk_inspector_object_tree_find_object (wt, object, &iter))
+    {
+      GtkTreePath *path = gtk_tree_model_get_path (GTK_TREE_MODEL (wt->priv->model), &iter);
+      gtk_tree_view_expand_to_path (GTK_TREE_VIEW (wt->priv->tree), path);
+      gtk_tree_selection_select_iter (gtk_tree_view_get_selection (GTK_TREE_VIEW (wt->priv->tree)), &iter);
+      gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (wt->priv->tree), path, NULL, FALSE, 0, 0);
+    }
+}
+
+
+// vim: set et sw=2 ts=2:
diff --git a/gtk/inspector/object-tree.h b/gtk/inspector/object-tree.h
new file mode 100644 (file)
index 0000000..a90efa6
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2008-2009  Christian Hammond
+ * Copyright (c) 2008-2009  David Trowbridge
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#ifndef _GTK_INSPECTOR_OBJECT_TREE_H_
+#define _GTK_INSPECTOR_OBJECT_TREE_H_
+
+#include <gtk/gtkbox.h>
+#include <gtk/gtktreemodel.h>
+
+#define GTK_TYPE_INSPECTOR_OBJECT_TREE            (gtk_inspector_object_tree_get_type())
+#define GTK_INSPECTOR_OBJECT_TREE(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_OBJECT_TREE, GtkInspectorObjectTree))
+#define GTK_INSPECTOR_OBJECT_TREE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_INSPECTOR_OBJECT_TREE, GtkInspectorObjectTreeClass))
+#define GTK_INSPECTOR_IS_OBJECT_TREE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INSPECTOR_OBJECT_TREE))
+#define GTK_INSPECTOR_IS_OBJECT_TREE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_INSPECTOR_OBJECT_TREE))
+#define GTK_INSPECTOR_OBJECT_TREE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_INSPECTOR_OBJECT_TREE, GtkInspectorObjectTreeClass))
+
+
+typedef struct _GtkInspectorObjectTreePrivate GtkInspectorObjectTreePrivate;
+
+typedef struct _GtkInspectorObjectTree
+{
+  GtkBox parent;
+  GtkInspectorObjectTreePrivate *priv;
+} GtkInspectorObjectTree;
+
+typedef struct _GtkInspectorObjectTreeClass
+{
+  GtkBoxClass parent;
+
+  void (*object_changed) (GtkInspectorObjectTree *wt,
+                          GObject                *object);
+} GtkInspectorObjectTreeClass;
+
+
+G_BEGIN_DECLS
+
+
+GType      gtk_inspector_object_tree_get_type            (void);
+
+void       gtk_inspector_object_tree_scan                (GtkInspectorObjectTree *wt,
+                                                          GtkWidget              *window);
+void       gtk_inspector_object_tree_select_object       (GtkInspectorObjectTree *wt,
+                                                          GObject                *object);
+void       gtk_inspector_object_tree_append_object       (GtkInspectorObjectTree *wt,
+                                                          GObject                *object,
+                                                          GtkTreeIter            *parent_iter,
+                                                          const gchar            *name);
+gboolean   gtk_inspector_object_tree_find_object         (GtkInspectorObjectTree *wt,
+                                                          GObject                *object,
+                                                          GtkTreeIter            *iter);
+
+G_END_DECLS
+
+
+#endif // _GTK_INSPECTOR_WIDGETTREE_H_
+
+// vim: set et sw=2 ts=2:
diff --git a/gtk/inspector/object-tree.ui b/gtk/inspector/object-tree.ui
new file mode 100644 (file)
index 0000000..6d0fc69
--- /dev/null
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface domain="gtk30">
+  <object class="GtkTreeStore" id="model">
+    <columns>
+      <column type="gpointer"/>
+      <column type="gchararray"/>
+      <column type="gchararray"/>
+      <column type="gchararray"/>
+      <column type="gchararray"/>
+      <column type="gboolean"/>
+    </columns>
+  </object>
+  <template class="GtkInspectorObjectTree" parent="GtkBox">
+    <property name="visible">True</property>
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkScrolledWindow">
+        <property name="visible">True</property>
+        <property name="hscrollbar-policy">automatic</property>
+        <property name="vscrollbar-policy">always</property>
+        <property name="shadow-type">in</property>
+        <property name="width-request">250</property>
+        <property name="expand">True</property>
+        <child>
+          <object class="GtkTreeView" id="tree">
+            <property name="visible">True</property>
+            <property name="model">model</property>
+            <property name="enable-search">True</property>
+            <property name="search-column">2</property>
+            <child internal-child="selection">
+              <object class="GtkTreeSelection">
+                <signal name="changed" handler="on_widget_selected"/>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn">
+                <property name="title" translatable="yes">Object</property>
+                <property name="resizable">True</property>
+                <child>
+                  <object class="GtkCellRendererText">
+                    <property name="scale">0.8</property>
+                  </object>
+                  <attributes>
+                    <attribute name="text">1</attribute>
+                    <attribute name="sensitive">5</attribute>
+                  </attributes>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn">
+                <property name="title" translatable="yes">Name</property>
+                <property name="resizable">True</property>
+                <child>
+                  <object class="GtkCellRendererText">
+                    <property name="scale">0.8</property>
+                  </object>
+                  <attributes>
+                    <attribute name="text">2</attribute>
+                    <attribute name="sensitive">5</attribute>
+                  </attributes>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn">
+                <property name="title" translatable="yes">Label</property>
+                <property name="resizable">True</property>
+                <child>
+                  <object class="GtkCellRendererText">
+                    <property name="scale">0.8</property>
+                  </object>
+                  <attributes>
+                    <attribute name="text">3</attribute>
+                    <attribute name="sensitive">5</attribute>
+                  </attributes>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn">
+                <property name="title" translatable="yes">Address</property>
+                <property name="resizable">True</property>
+                <child>
+                  <object class="GtkCellRendererText">
+                    <property name="scale">0.8</property>
+                    <property name="family">monospace</property>
+                  </object>
+                  <attributes>
+                    <attribute name="text">4</attribute>
+                    <attribute name="sensitive">5</attribute>
+                  </attributes>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+  </template>
+</interface>
diff --git a/gtk/inspector/object-tree.ui.h b/gtk/inspector/object-tree.ui.h
new file mode 100644 (file)
index 0000000..628c345
--- /dev/null
@@ -0,0 +1,4 @@
+N_("Object");
+N_("Name");
+N_("Label");
+N_("Address");
diff --git a/gtk/inspector/object-tree.ui.u b/gtk/inspector/object-tree.ui.u
new file mode 100644 (file)
index 0000000..628c345
--- /dev/null
@@ -0,0 +1,4 @@
+N_("Object");
+N_("Name");
+N_("Label");
+N_("Address");
index 40a39a0dd665d8e6a0cb92a87a79afd225993482..c0db772556d0130ebf626ad3021ccec42b9a57c5 100644 (file)
@@ -19,7 +19,7 @@
 #include <glib/gi18n-lib.h>
 
 #include "prop-editor.h"
-#include "widget-tree.h"
+#include "object-tree.h"
 
 #include "gtkactionable.h"
 #include "gtkadjustment.h"
index a06993608ef7d168148456a804bee0c1f97ef402..341bdb8c6d244727324375f51ea1ef3ed03c9003 100644 (file)
@@ -27,7 +27,7 @@
 #include "prop-list.h"
 
 #include "prop-editor.h"
-#include "widget-tree.h"
+#include "object-tree.h"
 
 #include "gtkcelllayout.h"
 #include "gtktreeview.h"
@@ -46,7 +46,7 @@ enum
 enum
 {
   PROP_0,
-  PROP_WIDGET_TREE,
+  PROP_OBJECT_TREE,
   PROP_CHILD_PROPERTIES
 };
 
@@ -56,7 +56,7 @@ struct _GtkInspectorPropListPrivate
   GtkListStore *model;
   GHashTable *prop_iters;
   gulong notify_handler_id;
-  GtkInspectorWidgetTree *widget_tree;
+  GtkInspectorObjectTree *object_tree;
   gboolean child_properties;
   GtkTreeViewColumn *attribute_column;
   GtkWidget *tree;
@@ -88,8 +88,8 @@ get_property (GObject    *object,
 
   switch (param_id)
     {
-      case PROP_WIDGET_TREE:
-        g_value_take_object (value, pl->priv->widget_tree);
+      case PROP_OBJECT_TREE:
+        g_value_take_object (value, pl->priv->object_tree);
         break;
 
       case PROP_CHILD_PROPERTIES:
@@ -112,8 +112,8 @@ set_property (GObject      *object,
 
   switch (param_id)
     {
-      case PROP_WIDGET_TREE:
-        pl->priv->widget_tree = g_value_get_object (value);
+      case PROP_OBJECT_TREE:
+        pl->priv->object_tree = g_value_get_object (value);
         break;
 
       case PROP_CHILD_PROPERTIES:
@@ -139,15 +139,15 @@ show_object (GtkInspectorPropEditor *editor,
   popover = gtk_widget_get_ancestor (GTK_WIDGET (editor), GTK_TYPE_POPOVER);
   gtk_widget_hide (popover);
 
-  g_object_set_data (G_OBJECT (pl->priv->widget_tree), "next-tab", (gpointer)tab);
-  if (gtk_inspector_widget_tree_find_object (pl->priv->widget_tree, object, &iter))
+  g_object_set_data (G_OBJECT (pl->priv->object_tree), "next-tab", (gpointer)tab);
+  if (gtk_inspector_object_tree_find_object (pl->priv->object_tree, object, &iter))
     {
-      gtk_inspector_widget_tree_select_object (pl->priv->widget_tree, object);
+      gtk_inspector_object_tree_select_object (pl->priv->object_tree, object);
     }
-  else if (gtk_inspector_widget_tree_find_object (pl->priv->widget_tree, pl->priv->object, &iter))
+  else if (gtk_inspector_object_tree_find_object (pl->priv->object_tree, pl->priv->object, &iter))
     {
-      gtk_inspector_widget_tree_append_object (pl->priv->widget_tree, object, &iter, name);
-      gtk_inspector_widget_tree_select_object (pl->priv->widget_tree, object);
+      gtk_inspector_object_tree_append_object (pl->priv->object_tree, object, &iter, name);
+      gtk_inspector_object_tree_select_object (pl->priv->object_tree, object);
     }
   else
     {
@@ -215,8 +215,8 @@ gtk_inspector_prop_list_class_init (GtkInspectorPropListClass *klass)
   object_class->get_property = get_property;
   object_class->set_property = set_property;
 
-  g_object_class_install_property (object_class, PROP_WIDGET_TREE,
-      g_param_spec_object ("widget-tree", "Widget Tree", "Widget tree",
+  g_object_class_install_property (object_class, PROP_OBJECT_TREE,
+      g_param_spec_object ("object-tree", "Object Tree", "Object tree",
                            GTK_TYPE_WIDGET, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
   g_object_class_install_property (object_class, PROP_CHILD_PROPERTIES,
       g_param_spec_boolean ("child-properties", "Child properties", "Child properties",
diff --git a/gtk/inspector/widget-tree.c b/gtk/inspector/widget-tree.c
deleted file mode 100644 (file)
index a819b78..0000000
+++ /dev/null
@@ -1,561 +0,0 @@
-/*
- * Copyright (c) 2008-2009  Christian Hammond
- * Copyright (c) 2008-2009  David Trowbridge
- * Copyright (c) 2013 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "config.h"
-#include <glib/gi18n-lib.h>
-
-#include <string.h>
-
-#include "widget-tree.h"
-#include "prop-list.h"
-
-#include "gtkbuildable.h"
-#include "gtkbutton.h"
-#include "gtkcelllayout.h"
-#include "gtkcomboboxprivate.h"
-#include "gtkiconview.h"
-#include "gtklabel.h"
-#include "gtkmenuitem.h"
-#include "gtksettings.h"
-#include "gtktextview.h"
-#include "gtktreeview.h"
-#include "gtktreeselection.h"
-#include "gtktreestore.h"
-#include "gtktreemodelsort.h"
-#include "gtktreemodelfilter.h"
-#include "gtkwidgetprivate.h"
-
-enum
-{
-  OBJECT,
-  OBJECT_TYPE,
-  OBJECT_NAME,
-  OBJECT_LABEL,
-  OBJECT_ADDRESS,
-  SENSITIVE
-};
-
-
-enum
-{
-  WIDGET_CHANGED,
-  LAST_SIGNAL
-};
-
-
-struct _GtkInspectorWidgetTreePrivate
-{
-  GtkTreeView *tree;
-  GtkTreeStore *model;
-  GHashTable *iters;
-  gulong map_hook;
-  gulong unmap_hook;
-};
-
-static guint widget_tree_signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE_WITH_PRIVATE (GtkInspectorWidgetTree, gtk_inspector_widget_tree, GTK_TYPE_BOX)
-
-static void
-on_widget_selected (GtkTreeSelection       *selection,
-                    GtkInspectorWidgetTree *wt)
-{
-  GObject *object;
-  GtkTreeIter iter;
-  GtkTreeSelection *sel;
-  GtkTreeModel *model;
-
-  sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (wt->priv->tree));
-  if (gtk_tree_selection_get_selected (sel, &model, &iter))
-    gtk_tree_model_get (model, &iter,
-                        OBJECT, &object,
-                        -1);
-  else
-    object = NULL;
-
-  g_signal_emit (wt, widget_tree_signals[WIDGET_CHANGED], 0, object);
-}
-
-typedef struct
-{
-  GtkInspectorWidgetTree *wt;
-  GObject *object;
-  GtkTreeRowReference *row;
-} ObjectData;
-
-static void
-gtk_widget_tree_remove_dead_object (gpointer data, GObject *dead_object)
-{
-  ObjectData *od = data;
-
-  if (gtk_tree_row_reference_valid (od->row))
-    {
-      GtkTreePath *path;
-      GtkTreeIter iter;
-      path = gtk_tree_row_reference_get_path (od->row);
-      gtk_tree_model_get_iter (GTK_TREE_MODEL (od->wt->priv->model), &iter, path);
-      gtk_tree_store_remove (od->wt->priv->model, &iter);
-      gtk_tree_path_free (path);
-    }
-  od->object = NULL;
-  g_hash_table_remove (od->wt->priv->iters, dead_object);
-}
-
-static void
-object_data_free (gpointer data)
-{
-  ObjectData *od = data;
-
-  gtk_tree_row_reference_free (od->row);
-
-  if (od->object)
-    g_object_weak_unref (od->object, gtk_widget_tree_remove_dead_object, od);
-
-  g_free (od);
-}
-
-static gboolean
-map_or_unmap (GSignalInvocationHint *ihint,
-              guint                  n_params,
-              const GValue          *params,
-              gpointer               data)
-{
-  GtkInspectorWidgetTree *wt = data;
-  GtkWidget *widget;
-  GtkTreeIter iter;
-
-  widget = g_value_get_object (params);
-  if (gtk_inspector_widget_tree_find_object (wt, G_OBJECT (widget), &iter))
-    gtk_tree_store_set (wt->priv->model, &iter,
-                        SENSITIVE, gtk_widget_get_mapped (widget),
-                        -1);
-
-  return TRUE;
-}
-
-static void
-gtk_inspector_widget_tree_init (GtkInspectorWidgetTree *wt)
-{
-  guint signal_id;
-
-  wt->priv = gtk_inspector_widget_tree_get_instance_private (wt);
-  wt->priv->iters = g_hash_table_new_full (g_direct_hash,
-                                           g_direct_equal,
-                                           NULL,
-                                           (GDestroyNotify) object_data_free);
-  gtk_widget_init_template (GTK_WIDGET (wt));
-
-  signal_id = g_signal_lookup ("map", GTK_TYPE_WIDGET);
-  wt->priv->map_hook = g_signal_add_emission_hook (signal_id, 0,
-                                                   map_or_unmap, wt, NULL);
-  signal_id = g_signal_lookup ("unmap", GTK_TYPE_WIDGET);
-  wt->priv->unmap_hook = g_signal_add_emission_hook (signal_id, 0,
-                                                   map_or_unmap, wt, NULL);
-
-  gtk_inspector_widget_tree_append_object (wt, G_OBJECT (gtk_settings_get_default ()), NULL, NULL);
-}
-
-static void
-gtk_inspector_widget_tree_finalize (GObject *object)
-{
-  GtkInspectorWidgetTree *wt = GTK_INSPECTOR_WIDGET_TREE (object);
-  guint signal_id;
-
-  g_hash_table_unref (wt->priv->iters);
-
-  signal_id = g_signal_lookup ("map", GTK_TYPE_WIDGET);
-  g_signal_remove_emission_hook (signal_id, wt->priv->map_hook);
-  signal_id = g_signal_lookup ("unmap", GTK_TYPE_WIDGET);
-  g_signal_remove_emission_hook (signal_id, wt->priv->unmap_hook);
-
-  G_OBJECT_CLASS (gtk_inspector_widget_tree_parent_class)->finalize (object);
-}
-
-static void
-gtk_inspector_widget_tree_class_init (GtkInspectorWidgetTreeClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
-  object_class->finalize = gtk_inspector_widget_tree_finalize;
-
-  widget_tree_signals[WIDGET_CHANGED] =
-      g_signal_new ("widget-changed",
-                    G_OBJECT_CLASS_TYPE (klass),
-                    G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
-                    G_STRUCT_OFFSET(GtkInspectorWidgetTreeClass, widget_changed),
-                    NULL, NULL,
-                    g_cclosure_marshal_VOID__OBJECT,
-                    G_TYPE_NONE, 1, G_TYPE_OBJECT);
-
-  gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/inspector/widget-tree.ui");
-  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorWidgetTree, model);
-  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorWidgetTree, tree);
-  gtk_widget_class_bind_template_callback (widget_class, on_widget_selected);
-}
-
-typedef struct
-{
-  GtkInspectorWidgetTree *wt;
-  GtkTreeIter *iter;
-  GObject *parent;
-} FindAllData;
-
-static void
-child_callback (GtkWidget *widget,
-                gpointer   data)
-{
-  FindAllData *d = data;
-
-  gtk_inspector_widget_tree_append_object (d->wt, G_OBJECT (widget), d->iter, NULL);
-}
-
-static gboolean
-cell_callback (GtkCellRenderer *renderer,
-               gpointer         data)
-{
-  FindAllData *d = data;
-  gpointer cell_layout;
-
-  cell_layout = g_object_get_data (d->parent, "gtk-inspector-cell-layout");
-  g_object_set_data (G_OBJECT (renderer), "gtk-inspector-cell-layout", cell_layout);
-  gtk_inspector_widget_tree_append_object (d->wt, G_OBJECT (renderer), d->iter, NULL);
-
-  return FALSE;
-}
-
-static void
-tag_callback (GtkTextTag *tag,
-              gpointer    data)
-{
-  FindAllData *d = data;
-  gchar *name;
-
-  g_object_get (tag, "name", &name, NULL);
-  gtk_inspector_widget_tree_append_object (d->wt, G_OBJECT (tag), d->iter, name);
-  g_free (name);
-}
-
-void
-gtk_inspector_widget_tree_append_object (GtkInspectorWidgetTree *wt,
-                                         GObject                *object,
-                                         GtkTreeIter            *parent_iter,
-                                         const gchar            *name)
-{
-  GtkTreeIter iter;
-  GtkTreePath *path;
-  const gchar *class_name;
-  gchar *address;
-  gboolean mapped;
-  ObjectData *od;
-  const gchar *label;
-
-  if (GTK_IS_WIDGET (object))
-    mapped = gtk_widget_get_mapped (GTK_WIDGET (object));
-  else
-    mapped = TRUE;
-
-  class_name = G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS (object));
-
-  if (GTK_IS_WIDGET (object))
-    {
-      const gchar *id;
-      id = gtk_widget_get_name (GTK_WIDGET (object));
-       if (name == NULL && id != NULL && g_strcmp0 (id, class_name) != 0)
-         name = id;
-    }
-
-  if (GTK_IS_BUILDABLE (object))
-    {
-      const gchar *id;
-      id = gtk_buildable_get_name (GTK_BUILDABLE (object));
-      if (name == NULL && id != NULL && !g_str_has_prefix (id, "___object_"))
-        name = id;
-    }
-
-  if (name == NULL)
-    name = "";
-
-  if (GTK_IS_LABEL (object))
-    label = gtk_label_get_text (GTK_LABEL (object));
-  else if (GTK_IS_BUTTON (object))
-    label = gtk_button_get_label (GTK_BUTTON (object));
-  else if (GTK_IS_WINDOW (object))
-    label = gtk_window_get_title (GTK_WINDOW (object));
-  else if (GTK_IS_TREE_VIEW_COLUMN (object))
-    label = gtk_tree_view_column_get_title (GTK_TREE_VIEW_COLUMN (object));
-  else
-    label = "";
-
-  address = g_strdup_printf ("%p", object);
-
-  gtk_tree_store_append (wt->priv->model, &iter, parent_iter);
-  gtk_tree_store_set (wt->priv->model, &iter,
-                      OBJECT, object,
-                      OBJECT_TYPE, class_name,
-                      OBJECT_NAME, name,
-                      OBJECT_LABEL, label,
-                      OBJECT_ADDRESS, address,
-                      SENSITIVE, mapped,
-                      -1);
-
-  od = g_new0 (ObjectData, 1);
-  od->wt = wt;
-  od->object = object;
-  path = gtk_tree_model_get_path (GTK_TREE_MODEL (wt->priv->model), &iter);
-  od->row = gtk_tree_row_reference_new (GTK_TREE_MODEL (wt->priv->model), path);
-  gtk_tree_path_free (path);
-
-  g_hash_table_insert (wt->priv->iters, object, od);
-  g_object_weak_ref (object, gtk_widget_tree_remove_dead_object, od);
-
-  g_free (address);
-
-  if (GTK_IS_CONTAINER (object))
-    {
-      FindAllData data;
-
-      data.wt = wt;
-      data.iter = &iter;
-      data.parent = object;
-
-      gtk_container_forall (GTK_CONTAINER (object), child_callback, &data);
-    }
-
-  /* Below are special cases for dependent objects which are not
-   * children in the GtkContainer sense, but which we still want
-   * to show in the tree right away.
-   */
-  if (GTK_IS_TREE_MODEL_SORT (object))
-    {
-      GObject *child = G_OBJECT (gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (object)));
-      if (child)
-        gtk_inspector_widget_tree_append_object (wt, child, &iter, "model");
-    }
-
-  if (GTK_IS_TREE_MODEL_FILTER (object))
-    {
-      GObject *child = G_OBJECT (gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (object)));
-      if (child)
-        gtk_inspector_widget_tree_append_object (wt, child, &iter, "model");
-    }
-
-  if (GTK_IS_MENU_ITEM (object))
-    {
-      GtkWidget *submenu;
-
-      submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (object));
-      if (submenu)
-        gtk_inspector_widget_tree_append_object (wt, G_OBJECT (submenu), &iter, "submenu");
-    }
-
-  if (GTK_IS_COMBO_BOX (object))
-    {
-      GtkWidget *popup;
-      GObject *child;
-
-      popup = gtk_combo_box_get_popup (GTK_COMBO_BOX (object));
-      if (popup)
-        gtk_inspector_widget_tree_append_object (wt, G_OBJECT (popup), &iter, "popup");
-
-      child = G_OBJECT (gtk_combo_box_get_model (GTK_COMBO_BOX (object)));
-      if (child)
-        gtk_inspector_widget_tree_append_object (wt, child, &iter, "model");
-    }
-
-  if (GTK_IS_TREE_VIEW (object))
-    {
-      gint n_columns, i;
-      GObject *child;
-
-      child = G_OBJECT (gtk_tree_view_get_model (GTK_TREE_VIEW (object)));
-      if (child)
-        gtk_inspector_widget_tree_append_object (wt, child, &iter, "model");
-
-      child = G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (object)));
-      if (child)
-        gtk_inspector_widget_tree_append_object (wt, child, &iter, "selection");
-
-      n_columns = gtk_tree_view_get_n_columns (GTK_TREE_VIEW (object));
-      for (i = 0; i < n_columns; i++)
-        {
-          child = G_OBJECT (gtk_tree_view_get_column (GTK_TREE_VIEW (object), i));
-          gtk_inspector_widget_tree_append_object (wt, child, &iter, NULL);
-        }
-    }
-
-  if (GTK_IS_ICON_VIEW (object))
-    {
-      GObject *child;
-
-      child = G_OBJECT (gtk_icon_view_get_model (GTK_ICON_VIEW (object)));
-      if (child)
-        gtk_inspector_widget_tree_append_object (wt, child, &iter, "model");
-    }
-
-  if (GTK_IS_CELL_AREA (object))
-    {
-      FindAllData data;
-
-      data.wt = wt;
-      data.iter = &iter;
-      data.parent = object;
-
-      gtk_cell_area_foreach (GTK_CELL_AREA (object), cell_callback, &data);
-    }
-  else if (GTK_IS_CELL_LAYOUT (object))
-    {
-      GtkCellArea *area;
-
-      area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (object));
-      g_object_set_data (G_OBJECT (area), "gtk-inspector-cell-layout", object);
-      gtk_inspector_widget_tree_append_object (wt, G_OBJECT (area), &iter, "cell-area");
-    }
-
-  if (GTK_IS_TEXT_VIEW (object))
-    {
-      GtkTextBuffer *buffer;
-
-      buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (object));
-      gtk_inspector_widget_tree_append_object (wt, G_OBJECT (buffer), &iter, "buffer");
-    }
-
-  if (GTK_IS_TEXT_BUFFER (object))
-    {
-      GtkTextTagTable *tags;
-
-      tags = gtk_text_buffer_get_tag_table (GTK_TEXT_BUFFER (object));
-      gtk_inspector_widget_tree_append_object (wt, G_OBJECT (tags), &iter, "tag-table");
-    }
-
-  if (GTK_IS_TEXT_TAG_TABLE (object))
-    {
-      FindAllData data;
-
-      data.wt = wt;
-      data.iter = &iter;
-      data.parent = object;
-
-      gtk_text_tag_table_foreach (GTK_TEXT_TAG_TABLE (object), tag_callback, &data);
-    }
-
-  if (GTK_IS_WIDGET (object))
-    {
-      struct {
-        GtkPropagationPhase  phase;
-        const gchar         *name;
-      } phases[] = {
-        { GTK_PHASE_CAPTURE, "capture" },
-        { GTK_PHASE_TARGET,  "target" },
-        { GTK_PHASE_BUBBLE,  "bubble" },
-        { GTK_PHASE_NONE,    "" }
-      };
-      gint i;
-
-      for (i = 0; i < G_N_ELEMENTS (phases); i++)
-        {
-          GList *list, *l;
-
-          list = _gtk_widget_list_controllers (GTK_WIDGET (object), phases[i].phase);
-          for (l = list; l; l = l->next)
-            {
-              GObject *controller = l->data;
-              gtk_inspector_widget_tree_append_object (wt, controller, &iter, phases[i].name);
-            }
-          g_list_free (list);
-        }
-    }
-
-}
-
-void
-gtk_inspector_widget_tree_scan (GtkInspectorWidgetTree *wt,
-                                GtkWidget              *window)
-{
-  GtkWidget *inspector_win;
-  GList *toplevels, *l;
-
-  gtk_tree_store_clear (wt->priv->model);
-  g_hash_table_remove_all (wt->priv->iters);
-  gtk_inspector_widget_tree_append_object (wt, G_OBJECT (gtk_settings_get_default ()), NULL, NULL);
-  if (g_application_get_default ())
-    gtk_inspector_widget_tree_append_object (wt, G_OBJECT (g_application_get_default ()), NULL, NULL);
-
-  if (window)
-    gtk_inspector_widget_tree_append_object (wt, G_OBJECT (window), NULL, NULL);
-
-  inspector_win = gtk_widget_get_toplevel (GTK_WIDGET (wt));
-  toplevels = gtk_window_list_toplevels ();
-  for (l = toplevels; l; l = l->next)
-    {
-      if (GTK_IS_WINDOW (l->data) &&
-          gtk_window_get_window_type (l->data) == GTK_WINDOW_TOPLEVEL &&
-          l->data != window &&
-          l->data != inspector_win)
-        gtk_inspector_widget_tree_append_object (wt, G_OBJECT (l->data), NULL, NULL);
-    }
-  g_list_free (toplevels);
-
-  gtk_tree_view_columns_autosize (GTK_TREE_VIEW (wt->priv->tree));
-}
-
-gboolean
-gtk_inspector_widget_tree_find_object (GtkInspectorWidgetTree *wt,
-                                       GObject                *object,
-                                       GtkTreeIter            *iter)
-{
-  ObjectData *od;
-
-  od = g_hash_table_lookup (wt->priv->iters, object);
-  if (od && gtk_tree_row_reference_valid (od->row))
-    {
-      GtkTreePath *path;
-
-      path = gtk_tree_row_reference_get_path (od->row);
-      gtk_tree_model_get_iter (GTK_TREE_MODEL (wt->priv->model), iter, path);
-      gtk_tree_path_free (path);
-
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
-void
-gtk_inspector_widget_tree_select_object (GtkInspectorWidgetTree *wt,
-                                         GObject                *object)
-{
-  GtkTreeIter iter;
-
-  if (gtk_inspector_widget_tree_find_object (wt, object, &iter))
-    {
-      GtkTreePath *path = gtk_tree_model_get_path (GTK_TREE_MODEL (wt->priv->model), &iter);
-      gtk_tree_view_expand_to_path (GTK_TREE_VIEW (wt->priv->tree), path);
-      gtk_tree_selection_select_iter (gtk_tree_view_get_selection (GTK_TREE_VIEW (wt->priv->tree)), &iter);
-      gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (wt->priv->tree), path, NULL, FALSE, 0, 0);
-    }
-}
-
-
-// vim: set et sw=2 ts=2:
diff --git a/gtk/inspector/widget-tree.h b/gtk/inspector/widget-tree.h
deleted file mode 100644 (file)
index 3ccd181..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2008-2009  Christian Hammond
- * Copyright (c) 2008-2009  David Trowbridge
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-#ifndef _GTK_INSPECTOR_WIDGET_TREE_H_
-#define _GTK_INSPECTOR_WIDGET_TREE_H_
-
-#include <gtk/gtkbox.h>
-#include <gtk/gtktreemodel.h>
-
-#define GTK_TYPE_INSPECTOR_WIDGET_TREE            (gtk_inspector_widget_tree_get_type())
-#define GTK_INSPECTOR_WIDGET_TREE(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INSPECTOR_WIDGET_TREE, GtkInspectorWidgetTree))
-#define GTK_INSPECTOR_WIDGET_TREE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_INSPECTOR_WIDGET_TREE, GtkInspectorWidgetTreeClass))
-#define GTK_INSPECTOR_IS_WIDGET_TREE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INSPECTOR_WIDGET_TREE))
-#define GTK_INSPECTOR_IS_WIDGET_TREE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_INSPECTOR_WIDGET_TREE))
-#define GTK_INSPECTOR_WIDGET_TREE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_INSPECTOR_WIDGET_TREE, GtkInspectorWidgetTreeClass))
-
-
-typedef struct _GtkInspectorWidgetTreePrivate GtkInspectorWidgetTreePrivate;
-
-typedef struct _GtkInspectorWidgetTree
-{
-  GtkBox parent;
-  GtkInspectorWidgetTreePrivate *priv;
-} GtkInspectorWidgetTree;
-
-typedef struct _GtkInspectorWidgetTreeClass
-{
-  GtkBoxClass parent;
-
-  void (*widget_changed) (GtkInspectorWidgetTree *wt,
-                          GObject                *object);
-} GtkInspectorWidgetTreeClass;
-
-
-G_BEGIN_DECLS
-
-
-GType      gtk_inspector_widget_tree_get_type            (void);
-
-void       gtk_inspector_widget_tree_scan                (GtkInspectorWidgetTree *wt,
-                                                          GtkWidget              *window);
-void       gtk_inspector_widget_tree_select_object       (GtkInspectorWidgetTree *wt,
-                                                          GObject                *object);
-void       gtk_inspector_widget_tree_append_object       (GtkInspectorWidgetTree *wt,
-                                                          GObject                *object,
-                                                          GtkTreeIter            *parent_iter,
-                                                          const gchar            *name);
-gboolean   gtk_inspector_widget_tree_find_object         (GtkInspectorWidgetTree *wt,
-                                                          GObject                *object,
-                                                          GtkTreeIter            *iter);
-
-G_END_DECLS
-
-
-#endif // _GTK_INSPECTOR_WIDGETTREE_H_
-
-// vim: set et sw=2 ts=2:
diff --git a/gtk/inspector/widget-tree.ui b/gtk/inspector/widget-tree.ui
deleted file mode 100644 (file)
index 0d222aa..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface domain="gtk30">
-  <object class="GtkTreeStore" id="model">
-    <columns>
-      <column type="gpointer"/>
-      <column type="gchararray"/>
-      <column type="gchararray"/>
-      <column type="gchararray"/>
-      <column type="gchararray"/>
-      <column type="gboolean"/>
-    </columns>
-  </object>
-  <template class="GtkInspectorWidgetTree" parent="GtkBox">
-    <property name="visible">True</property>
-    <property name="orientation">vertical</property>
-    <child>
-      <object class="GtkScrolledWindow">
-        <property name="visible">True</property>
-        <property name="hscrollbar-policy">automatic</property>
-        <property name="vscrollbar-policy">always</property>
-        <property name="shadow-type">in</property>
-        <property name="width-request">250</property>
-        <property name="expand">True</property>
-        <child>
-          <object class="GtkTreeView" id="tree">
-            <property name="visible">True</property>
-            <property name="model">model</property>
-            <property name="enable-search">True</property>
-            <property name="search-column">2</property>
-            <child internal-child="selection">
-              <object class="GtkTreeSelection">
-                <signal name="changed" handler="on_widget_selected"/>
-              </object>
-            </child>
-            <child>
-              <object class="GtkTreeViewColumn">
-                <property name="title" translatable="yes">Object</property>
-                <property name="resizable">True</property>
-                <child>
-                  <object class="GtkCellRendererText">
-                    <property name="scale">0.8</property>
-                  </object>
-                  <attributes>
-                    <attribute name="text">1</attribute>
-                    <attribute name="sensitive">5</attribute>
-                  </attributes>
-                </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkTreeViewColumn">
-                <property name="title" translatable="yes">Name</property>
-                <property name="resizable">True</property>
-                <child>
-                  <object class="GtkCellRendererText">
-                    <property name="scale">0.8</property>
-                  </object>
-                  <attributes>
-                    <attribute name="text">2</attribute>
-                    <attribute name="sensitive">5</attribute>
-                  </attributes>
-                </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkTreeViewColumn">
-                <property name="title" translatable="yes">Label</property>
-                <property name="resizable">True</property>
-                <child>
-                  <object class="GtkCellRendererText">
-                    <property name="scale">0.8</property>
-                  </object>
-                  <attributes>
-                    <attribute name="text">3</attribute>
-                    <attribute name="sensitive">5</attribute>
-                  </attributes>
-                </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkTreeViewColumn">
-                <property name="title" translatable="yes">Address</property>
-                <property name="resizable">True</property>
-                <child>
-                  <object class="GtkCellRendererText">
-                    <property name="scale">0.8</property>
-                    <property name="family">monospace</property>
-                  </object>
-                  <attributes>
-                    <attribute name="text">4</attribute>
-                    <attribute name="sensitive">5</attribute>
-                  </attributes>
-                </child>
-              </object>
-            </child>
-          </object>
-        </child>
-      </object>
-    </child>
-  </template>
-</interface>
diff --git a/gtk/inspector/widget-tree.ui.h b/gtk/inspector/widget-tree.ui.h
deleted file mode 100644 (file)
index 628c345..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-N_("Object");
-N_("Name");
-N_("Label");
-N_("Address");
index 48a5d824441e49b6b50f09744bbb98a6c8063a5f..63d04d8919b4cbe0c70944a95d75e30689eb3abf 100644 (file)
@@ -32,7 +32,7 @@
 #include "classes-list.h"
 #include "css-editor.h"
 #include "object-hierarchy.h"
-#include "widget-tree.h"
+#include "object-tree.h"
 #include "size-groups.h"
 #include "style-prop-list.h"
 #include "data-list.h"
@@ -48,7 +48,7 @@
 G_DEFINE_TYPE (GtkInspectorWindow, gtk_inspector_window, GTK_TYPE_WINDOW)
 
 static void
-on_widget_tree_selection_changed (GtkInspectorWidgetTree *wt,
+on_object_tree_selection_changed (GtkInspectorObjectTree *wt,
                                   GObject                *selected,
                                   GtkInspectorWindow     *iw)
 {
@@ -109,7 +109,7 @@ gtk_inspector_window_constructed (GObject *object)
 
   G_OBJECT_CLASS (gtk_inspector_window_parent_class)->constructed (object);
 
-  gtk_inspector_widget_tree_scan (GTK_INSPECTOR_WIDGET_TREE (iw->widget_tree), NULL);
+  gtk_inspector_object_tree_scan (GTK_INSPECTOR_OBJECT_TREE (iw->object_tree), NULL);
 }
 
 static void
@@ -123,7 +123,7 @@ gtk_inspector_window_class_init (GtkInspectorWindowClass *klass)
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/inspector/window.ui");
 
   gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, top_stack);
-  gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, widget_tree);
+  gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, object_tree);
   gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, prop_list);
   gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, child_prop_list);
   gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, signals_list);
@@ -139,7 +139,7 @@ gtk_inspector_window_class_init (GtkInspectorWindowClass *klass)
   gtk_widget_class_bind_template_child (widget_class, GtkInspectorWindow, gestures);
 
   gtk_widget_class_bind_template_callback (widget_class, gtk_inspector_on_inspect);
-  gtk_widget_class_bind_template_callback (widget_class, on_widget_tree_selection_changed);
+  gtk_widget_class_bind_template_callback (widget_class, on_object_tree_selection_changed);
 }
 
 GtkWidget *
index b719f165acaca12dbd376185f0cecc56f93dd3b6..3ae67680454db820b6a65f5e570573dfefdf4db6 100644 (file)
@@ -42,7 +42,7 @@ typedef struct
   GtkWindow parent;
 
   GtkWidget *top_stack;
-  GtkWidget *widget_tree;
+  GtkWidget *object_tree;
   GtkWidget *prop_list;
   GtkWidget *child_prop_list;
   GtkWidget *signals_list;
index 03ecf2833a18e6b22d6e59b345f20bd4fa6558c5..ccd3c731e9fa83e8e03368e6bff9caf9645e99b0 100644 (file)
@@ -48,9 +48,9 @@
             <property name="visible">True</property>
             <property name="orientation">horizontal</property>
             <child>
-              <object class="GtkInspectorWidgetTree" id="widget_tree">
+              <object class="GtkInspectorObjectTree" id="object_tree">
                 <property name="visible">True</property>
-                <signal name="widget-changed" handler="on_widget_tree_selection_changed"/>
+                <signal name="object-changed" handler="on_object_tree_selection_changed"/>
               </object>
               <packing>
                 <property name="resize">True</property>
@@ -65,7 +65,7 @@
                 <child>
                   <object class="GtkInspectorMiscInfo" id="misc_info">
                     <property name="visible">True</property>
-                    <property name="widget-tree">widget_tree</property>
+                    <property name="object-tree">object_tree</property>
                   </object>
                   <packing>
                     <property name="tab_expand">True</property>
@@ -82,7 +82,7 @@
                   <object class="GtkInspectorPropList" id="prop_list">
                     <property name="visible">True</property>
                     <property name="child-properties">False</property>
-                    <property name="widget-tree">widget_tree</property>
+                    <property name="object-tree">object_tree</property>
                   </object>
                   <packing>
                     <property name="tab_expand">True</property>
                 <child>
                   <object class="GtkInspectorPropList" id="child_prop_list">
                     <property name="child-properties">True</property>
-                    <property name="widget-tree">widget_tree</property>
+                    <property name="object-tree">object_tree</property>
                   </object>
                   <packing>
                     <property name="tab_expand">True</property>
                 </child>
                 <child>
                   <object class="GtkInspectorGestures" id="gestures">
-                    <property name="widget-tree">widget_tree</property>
+                    <property name="object-tree">object_tree</property>
                   </object>
                 </child>
                 <child type="tab">